package com.github.diy;

import org.aspectj.lang.JoinPoint;

import java.util.Arrays;

/**
 * @author fatfish
 * @version 1.0
 * @date 2025/8/15 17:02
 */
public class DiyPointCut {

    // "前置通知"方法现在可以接收一个JoinPoint对象
    public void before(JoinPoint jp) {
        System.out.println("---------方法执行前---------");

        // 1. 获取目标对象
        System.out.println("目标对象: " + jp.getTarget());

        // 2. 获取方法签名，从而得到方法名和类名
        System.out.println("拦截的方法: " + jp.getSignature().getName());
        System.out.println("方法所属类: " + jp.getSignature().getDeclaringTypeName());

        // 3. 获取方法的参数
        System.out.println("方法参数: " + Arrays.toString(jp.getArgs()));
    }

    // "后置通知"方法同样可以获取这些信息
    public void after(JoinPoint jp) {
        System.out.println("---------方法执行后---------");
        System.out.println("方法 " + jp.getSignature().getName() + " 执行完毕。");
    }
}
